简单的计算机软件只有短短的几行代码,而大型复杂软件则需要有数百万行代码,这数百万行代码集合成一个前后呼应的有机整体。今天,任何一个人要从头到尾完全控制一个大型复杂软件的开发,保证没有Bug(问题),是一件十分困难的事。但是大型复杂软件仍然层出不穷,尤其是微软公司,在这方面取得了很大的成功。那么,微软是如何开发大型复杂软件的?
朱丽叶·潘是美国微软公司首席软件开发工程师之一,是少数能够独当一面的软件开发负责人。她参与了许多微软产品的开发,包括MicrosoftAccess1.0、2.0,Access95以及VisualBasic7.0。根据她的介绍,微软公司开发大型复杂软件要经过以下几个过程:
1.市场调研由产品经理来组织。这些产品经理是具有技术经验的MBA。市场调研的方式是通过访问消费者和调查用户,得到准确的用户需求,由核心问题小组将用户需求整理出完整的需求报告。
2.定义产品由程序经理来完成。程序经理必须是计算机科学或相关专业毕业,具有良好的计算机背景。他们将市场需求转变成产品定义,写出软件规格说明书。
3.开发产品由软件开发工程师来完成。软件开发工程师必须是计算机科学或相关专业毕业,可以用“C”、“C++”、“Java”或“Basic”编写软件。
4.测试产品由软件测试工程师来完成。软件测试工程师必须是计算机科学或相关专业毕业,他们通过使用软件来发现问题,并且编写自动测试套件。
5.编写文档由技术作家(相对于文学作家)来完成。技术作家要求有文学或技术写作的背景。工作是编写产品文档。
6.可用性测试由产品设计师和用户接口工程师来完成。产品设计师和用户接口工程师要求具有工业工程或心理学的背景,他们的工作是让用户试用尚未正式发售的产品。不知道产品的人,往往不知道产品如何使用。可用性测试项目之一是在单向玻璃幕墙后,测试人员向被测试者发布完成某项任务的指令,然后观察被测试者的反映,以此来判断程序界面的友好程度。
7.产品支持由产品支持工程师来完成。产品支持工程师要求有计算机科学或相关专业的背景,通过电话、电子邮件和传真等方式来回答用户在使用过程中的问题。
那么,开发一个大型复杂软件所面临的最大挑战是什么呢?
主要有以下几点:
1.招聘员工、组建团队上面讲的软件开发的每一个阶段,都是由一个特定的部门来完成的。每一个部门都由相应的专家组成一个团队,以协同工作的形式来完成该部门的任务,团队中的每个人都有明确的分工。
软件公司的资产是什么?有形的资产无非是办公大楼、计算机、办公桌椅,但这些物品并不值多少钱,就有形资产而言,微软公司的资产根本无法同通用电气、IBM这样的巨无霸公司相提并论,但是微软公司的股票市值却超过了这两家公司。那么股民究竟看好了微软公司的什么东西呢?
其实,软件公司最重要的资产就是它的专家队伍。微软公司奉行“宁缺毋滥”的原则,对所招聘的每一位员工都要进行严格的技术测试,最后聘用那些最精明能干和充满热情的人,精明能干和充满热情比行业经验要重要得多。1988年的时候,微软公司有几千人,当时就有上千个岗位空额。现在微软公司已经有了两万多人,但还是有上千个岗位空额,微软公司每年收到的应聘简历达十二万份,但要招聘到合适的人才仍然不是一件容易的事情。
2.合作与交流大型复杂软件都是由各个组件组合而成的。软件生产的组件化要求在各个团队间保持高水平的合作。要使各个团队能够紧密协作,对产品必须有一个明确的设想和规划,而且,组内人员必须进行开诚布公的、明确的交流。
3.发现/跟踪/解决问题(Bugs)任何一个软件的开发,都存在这样那样的问题,这些问题要么来源于设计不当,要么是可用性存在问题,文档错误、代码错误等等也都是软件的缺陷。微软公司用一个数据库来管理软件错误。发现错误时,人员A向数据库中输入一个错误,然后,这个错误被分配给适当的人来解决,最后由人员A来确认问题是否得到解决。
4.良好的开发/测试方法首先要有一个良好的开发进度表,每一个开发进度结束后,都要对这个阶段工作的经验教训进行总结。对应于每一个开发员,相应地有一个审定人员审定原代码。每一个软件开发结束以后,要对该软件进行故障测试,主要是运行测试套件,并进行代码覆盖性测试。所谓覆盖性测试,就是让软件运行到尽量多的不同品牌的芯片上。
5.出色的国际化,以满足全球市场的需求主要任务是定义不同国家、语言和文化环境的特征和个性需求,处理货币、时间和语言之间的差异,提供本地化程序文档。这项工作需要一个由开发者、测试工程师、程序管理员和本地专家组成的团队。
据朱丽叶·潘小姐介绍,Access这个产品,1992年10月推出了第一版,当时开发人员有20多人,测试人员也有20多人。根据多年的经验,微软公司发现开发人员和测试人员的最佳比例是1比1,也就是说一个开发人员对应一个测试人员为妥。如果测试人员太少,则不足以保证软件的质量;如果测试人员太多,一是经济效益不好,二是产品的修改永无止境,所以产品的测试也要适可而止。程序管理人员和开发人员的比例是1比3。程序管理人员最恰当的称呼应该是叫做技术协作经理,除了产品总体设计以外,他还要在开发、测试、文档和产品支持之间进行协调。
大型复杂软件的开发是一件艰巨而复杂的工作,而且开发的风险也很高。但是大型复杂软件的开发一旦成功,产生的经济效益也是相当可观的。国内的如北大方正排版系统,国外的如德国的SAP企业管理软件,微软公司的Office系列,都产生了巨大的经济效益。软件业在美国已经取代了汽车及飞机制造行业在国民经济中的领导地位,而成为新的支柱行业。在中国,软件行业成为国民经济支柱行业的这一天也不会遥远。所以,大型复杂软件的开发,是值得国内软件行业重视的一件大事。